package ru.javadevelop.homefinans.activities;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.InputFilter;
import android.text.method.DigitsKeyListener;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.*;
import ru.javadevelop.homefinans.R;
import ru.javadevelop.homefinans.async.SyncAsyncTask;
import ru.javadevelop.homefinans.models.Category;
import ru.javadevelop.homefinans.models.Cost;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.UUID;

public class HomeActivity extends BaseActivity
{

    private Intent intent = new Intent();
    private Category  selectedCategory;
//**********************************************************************************************************************
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Заполнение категорий
        ArrayList<Category> categories =  Category.getAll();
        if (categories.isEmpty())
        {
            fillCategories();
            categories = Category.getAll();
        }
        ArrayAdapter<Category> categoryArrayAdapter = new ArrayAdapter<Category>(this,
                                                                          android.R.layout.simple_spinner_item,
                                                                          categories);
        categoryArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        Spinner spinner = (Spinner) findViewById(R.id.categoriesSpinner);
        spinner.setAdapter(categoryArrayAdapter);

        // Реакция на выбор из списка
        spinner.setOnItemSelectedListener(new InputCatergoryListener());

        EditText myText = (EditText)findViewById(R.id.costInput);
        // Реакция на ввод цены
        myText.setOnKeyListener(new EnterCostListener());
        // Реакция на нажатие кнопки «Сохранить»
        Button button = (Button) findViewById(R.id.saveButton);
        button.setOnClickListener(new SaveCostListener());
        setFocus(myText);
    }
    //******************************************************************************************************************
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        // Обработка нажатия на пункт меню Settings
        MenuItem settingsMenuItem = menu.add(R.string.settings);
        intent.setClass(this, SettingsActivity.class);
        settingsMenuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem _menuItem) {
                SettingsActivity settingsActivity = new SettingsActivity();
                startActivityForResult(intent, 0);
                return true;
            }
        });

        TextView txt = new TextView(this);
        txt.setFilters(new InputFilter[]{new DigitsKeyListener()});
        // Второй  пункт меню
        MenuItem syncMenuItem  = menu.add(R.string.sync);
        syncMenuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                SyncAsyncTask asyncTask = new SyncAsyncTask();
                asyncTask.execute(HomeActivity.this);
                HomeActivity.this.onStart();
                return  true;
            }
        });
        return true;
    }
    //******************************************************************************************************************
    @Override
    public void onStart()
    {
        super.onStart();
        ArrayList<Category> categories =  Category.getAll();
        ArrayAdapter<Category> categoryArrayAdapter = new ArrayAdapter<Category>(this,
                android.R.layout.simple_spinner_item,
                categories);
        categoryArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        Spinner spinner = (Spinner) findViewById(R.id.categoriesSpinner);
        spinner.setAdapter(categoryArrayAdapter);
    }

    // -----------------------------------------------------------------------------------------------------------------
    /**
     * Реакция на нажатие «Сохранить»
     */
    private class EnterCostListener implements View.OnKeyListener
    {
        @Override
        public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
            if(keyEvent.getAction() == KeyEvent.ACTION_DOWN &&
                    (keyCode == KeyEvent.KEYCODE_ENTER))
            {
                Spinner spinner = (Spinner) findViewById(R.id.categoriesSpinner);
                spinner.performClick();
                // скрываем клавиатуру
                EditText myText = (EditText)findViewById(R.id.costInput);
                hideKeyboard(myText);
            }
            return false;

        }
    }
    //******************************************************************************************************************
    /**
     * Слушатель выбора категории затрат из выпадающего списка
     */
    private  class InputCatergoryListener implements Spinner.OnItemSelectedListener
    {

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            Spinner spinner = (Spinner) findViewById(R.id.categoriesSpinner);
            HomeActivity.this.selectedCategory = (Category)spinner.getSelectedItem();
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
            //To change body of implemented methods use File | Settings | File Templates.
        }
    }
    //******************************************************************************************************************
    /**
     * Нажатие на кнопочку «Сохранить» затрату.
     */
    private class SaveCostListener implements Button.OnClickListener
    {
        @Override
        public void onClick(View view) {
            EditText myText = (EditText) HomeActivity.this.findViewById(R.id.costInput);
            try
            {
                String SETTINGS_KEY = "Global";
                SharedPreferences mySharedPreferences = getSharedPreferences(SETTINGS_KEY, 0);
                String username =  mySharedPreferences.getString("Email", "");
                Cost cost = new Cost(UUID.randomUUID().toString(),
                                     BigDecimal.valueOf(Double.valueOf(myText.getText().toString())),
                                     selectedCategory.id,
                                     username,
                                     Calendar.getInstance().getTime());
                cost.save();
                myText.setText("");
                showMessage(getString(R.string.added_cost_message), 1300);

            }
            // Если введен неверный аргумент и его нельзя преобразовать в Decimal
            catch (IllegalArgumentException ex) {
                showMessage(getString(R.string.error_cost_message), 1300);
            }
            // Если какая-то другая ошибка, — скорее всего, у нас не вбиты настройки
            catch (RuntimeException ex)
            {
                showMessage(getString(R.string.no_settings_error), 1300);
            }
        }
    }
//**********************************************************************************************************************
    /**
     * Первичное заполнение категорий, чтобы не было пустого списка
     */
    private void fillCategories()
    {
        Category cat1 = new Category("Категория1");
        cat1.save();
        Category cat2 = new Category("Категория2");
        cat2.save();
        Category cat3 = new Category("Категория3");
        cat3.save();
        Category cat8 = new Category("Категория4");
        cat8.save();
        Category cat5 = new Category("Категория5");
        cat5.save();
        Category cat6 = new Category("Категория6");
        cat6.save();
        Category cat7 = new Category("Категория7");
        cat7.save();
        Category cat4 = new Category("Категория8");
        cat4.save();
    }
}
